#!/bin/bash

# 远程服务器信息
SERVER="root@182.160.6.140"
DEPLOY_PATH="/var/www/binance-analysis"

# 主应用使用的端口
APP_PORT=3000

echo "开始更新云服务器代码..."

# 获取脚本所在目录的绝对路径
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
PROJECT_ROOT="$( dirname "$SCRIPT_DIR" )"

# 切换到项目根目录
cd "$PROJECT_ROOT"

# 清理旧的打包文件
echo "清理旧文件..."
rm -f /tmp/deploy.zip

# 打包项目文件(排除node_modules和.git)
echo "打包项目文件..."
zip -r /tmp/deploy.zip . -x "node_modules/*" ".git/*" "*.log"

# 上传到服务器
echo "上传文件到服务器..."
scp /tmp/deploy.zip $SERVER:$DEPLOY_PATH/

# 清理本地临时文件
rm /tmp/deploy.zip

# SSH连接到服务器执行更新操作
echo "连接服务器执行更新..."
ssh $SERVER bash -c "
  cd /var/www/binance-analysis
  
  echo \"停止主应用...\"
  # 停止主应用
  pm2 stop binance-analysis || true
  pm2 delete binance-analysis || true
  
  echo \"检查并释放${APP_PORT}端口(主应用)...\"
  # 查找并杀死可能占用主应用端口的进程
  PORT_PID=\$(lsof -t -i:${APP_PORT})
  if [ ! -z \"\$PORT_PID\" ]; then
    echo \"发现进程 \$PORT_PID 占用端口${APP_PORT}，正在终止...\"
    kill -9 \$PORT_PID || true
    sleep 1
  fi
  
  # 再次检查确保端口已释放
  PORT_PID=\$(lsof -t -i:${APP_PORT})
  if [ ! -z \"\$PORT_PID\" ]; then
    echo \"仍有进程占用${APP_PORT}端口，再次尝试终止...\"
    kill -9 \$PORT_PID || true
    sleep 2
  fi
  
  # 最后验证端口是否真的可用
  PORT_PID=\$(lsof -t -i:${APP_PORT})
  if [ ! -z \"\$PORT_PID\" ]; then
    echo \"警告：端口${APP_PORT}仍被占用，可能导致主应用启动失败\"
  else
    echo \"端口${APP_PORT}已释放，可以启动主应用\"
  fi
  
  echo \"备份当前node_modules...\"
  if [ -d \"node_modules\" ]; then
    mv node_modules node_modules_bak
  fi
  
  echo \"清理旧文件...\"
  find . -maxdepth 1 -not -name \"node_modules_bak\" -not -name \".\" -not -name \"..\" -not -name \"deploy.zip\" -exec rm -rf {} \\;
  
  echo \"解压新文件...\"
  unzip -o deploy.zip
  rm -f deploy.zip
  
  echo \"恢复node_modules...\"
  if [ -d \"node_modules_bak\" ]; then
    rm -rf node_modules
    mv node_modules_bak node_modules
  fi
  
  echo \"更新pm2...\"
  npm install pm2@latest -g
  
  echo \"安装新依赖...\"
  npm install
  
  echo \"设置文件权限...\"
  if [ -d \"scripts\" ]; then
    chmod +x scripts/*.sh
    # 特别确保TD序列监控脚本有执行权限
    if [ -f \"scripts/start_td_monitor.sh\" ]; then
      echo \"设置TD序列监控脚本执行权限...\"
      chmod +x scripts/start_td_monitor.sh
    fi
    if [ -f \"scripts/monitor_td_sequence.js\" ]; then
      echo \"确保TD序列监控JS脚本可读...\"
      chmod 644 scripts/monitor_td_sequence.js
    fi
  fi

  echo \"启动主应用(端口：${APP_PORT})...\"
  # 最后再检查一次端口
  PORT_PID=\$(lsof -t -i:${APP_PORT})
  if [ ! -z \"\$PORT_PID\" ]; then
    echo \"端口${APP_PORT}仍被占用，尝试最后一次清理...\"
    kill -9 \$PORT_PID || true
    sleep 2
  fi
  
  # 启动主应用，并设置端口环境变量
  echo \"使用端口 ${APP_PORT} 启动主应用...\"
  PORT=${APP_PORT} pm2 start src/server.js --name binance-analysis
  
  # 保存PM2配置
  pm2 save
  
  # 显示进程状态
  echo \"显示当前运行的应用...\"
  pm2 list
  
  echo \"主应用更新完成!\"
  
  echo \"提示：要启动TD序列监控服务，请运行: ./scripts/start_td_monitor.sh 或 ./scripts/service_manager.sh start_td_monitor\"
"

echo "部署完成！" 